| Class Activity | Count | Points | Max Points |
|---|---|---|---|
| AWS Academy Generative AI Foundations | 1 | 100 | 100 |
| Group Paper Presentation (Once per Group)* | 1 | 50 | 50 |
| Assignment | 4 | 50 | 200 |
| Managerial report with Application Demo | 1 | 70 | 70 |
| Corpus Familiarization & Chatbot Scope | 1 | - | - |
| Text Structuring & Retrieval Units | 1 | - | - |
| Embeddings & Retrieval Baseline | 1 | - | - |
| Grounded Generation & Guardrails | 1 | - | - |
| Group Project Presentation | 1 | 40 | 40 |
| Group Feedback | 1 | 40 | 40 |
| Total | - | - | 500 |
M01: Lecture Note 1
Introduction to Generative AI & Business Applications
1 What This Course Is About
This course explores how modern generative AI systems reshape analytical workflows and business decision-making. You will learn:
- How natural language functions as a data type
- How LLMs process text, structure information, and generate content
- How GenAI integrates with business analytics pipelines
- How to build practical generative-AI solutions with Python, APIs, and automation
- How to critically evaluate model outputs, reliability, and risks
- How to design human–AI workflows and deploy GenAI tools effectively in organizations
2 Why This Course Matters for Your Career
- Every analytics job now intersects with LLMs.
- Analysts who master prompt engineering, RAG, automation, and LLM-based workflows will dramatically outperform peers.
- AI-augmented analysts produce more work, more insight, and higher-value deliverables.
- Organizations expect you to understand:
- How AI reads and structures unstructured data
- How to integrate AI into dashboards, apps, and analytical workflows
- Responsible use, privacy, transparency, and governance principles
- This course trains you in supporting interviews, project pitches, and job applications while responding to the AI Augmented Analyst roles.
- AI Foundations & Developer Setup
- Natural Language and Generative AI Landscape
- Prompt Engineering & Vector Representations
- LLM Architecture & Fine-Tuning
- Retrieval-Augmented Generation (RAG) Systems
- Efficient Tuning & Similarity Search
- LLM Memory and Multimodal Intelligence
- Evaluation, Bias, and Responsible AI
- Autonomous Agents and Multi-Agent Systems
3 Course Structure
3.1 Modules 0–7
Each module has two lectures, two labs, and one assignment. Topics include:
- M0 - AI Foundations & Developer Setup
- M1 - Natural Language and Generative AI Landscape
- M2 - Prompt Engineering & Vector Representations
- M3 - LLM Architecture & Fine-Tuning
- M4 - Retrieval-Augmented Generation (RAG) Systems
- M5 - Efficient Tuning & Similarity Search
- M6 - LLM Memory and Multimodal Intelligence
- M7 - Evaluation, Bias, and Responsible AI
- M8 - Autonomous Agents and Multi-Agent Systems
4 Course Grading
4.1 Participation Components
4.1.1 LLM Lab Practice
- Weekly hands-on exercises using LLMs
- Focus on prompting, automation, and applied business tasks
4.1.2 Tooling: GitHub, Python, APIs
- You will maintain a public portfolio repository
- Every assignment and project will be submitted via GitHub
4.2 In-Class Labs
Labs are short, guided activities where you:
- Work directly with LLM models
- Explore generative workflows
- Build first-draft AI tools that feed into assignments
- Analyze data, automate tasks, and generate outputs
- Write practical reports and visualizations
On-campus: must submit weekly Online: optional but recommended for practice
4.3 Individual Assignments
Four structured assignments that build core competencies:
- Prompt Engineering & Automated Analytics
- RAG and Vector Search
- AI Pipeline for Business Intelligence
- Automated Workflow + API Integration
4.4 Group Project
A semester-long generative-AI solution to a business problem.
4.4.1 Components
| Component | Points | Description |
|---|---|---|
| Milestones via GitHub | 80 | Repo setup, design docs, data prep, RAG prototype, LLM workflow, final output |
| Presentation | 40 | Demonstrates model workflow and business impact |
| Peer Evaluation | 40 | Collaboration, clarity, and contributions |
Total: 160 points
5 Course Site
- Central hub for all materials
- Contains lecture notes, slides, labs, and links
- Includes schedule, deadlines, and announcements
- Updated continuously as the course progresses
6 Office Hours & Consultations
- Listed on Blackboard
- Weekly sessions for troubleshooting code, labs, and assignments
- Dedicated project support sessions (Saturday mornings on Zoom)
7 Generative Artificial Intelligence: A brief Overview
7.1 Introduction
Generative artificial intelligence represents one of the most significant paradigm shifts in the history of computing. For decades, computers have been designed to follow instructions - perform calculations, retrieve information, classify inputs, and obey predefined rules. Generative AI introduces something profoundly new: the ability for machines to produce original content, synthesize knowledge, reason through language, and interact conversationally in a way that resembles human creativity and communication.
These systems do not simply automate tasks; they reshape how people think, work, and engage with information. While their roots lie in classical machine learning, generative models extend far beyond traditional predictive analytics. They do not merely recognize patterns - they generate new ones.
7.2 What Is Generative AI?
Generative AI refers to models capable of creating new artifacts that did not previously exist in the training data. These artifacts may include:
- Essays, summaries, stories, and explanations
- Images, sketches, animations, or design concepts
- Scientific hypotheses or molecular structures
- Code, scripts, and executable workflows
- Synthetic data for simulation or experimentation
- Audio, music, or environmental soundscapes
- Video sequences and motion dynamics
What distinguishes generative AI from earlier forms of artificial intelligence is its ability to create content that is coherent, context-aware, adaptive, and semantically meaningful.
A generative model learns the underlying structure of the data it is trained on - the grammar of language, the geometry of images, the relationships in chemistry, the cadence of music - and uses this learned representation to create new outputs consistent with these structures.
7.3 Generative AI vs. Traditional Artificial Intelligence
Artificial intelligence is a broad umbrella that includes:
- computer vision
- speech recognition
- classical natural language processing
- reinforcement learning
- robotics
- predictive modeling
- optimization algorithms
These systems primarily classify, detect, optimize, or recommend based on the data they receive.
Generative AI is a subset of AI that explicitly focuses on creation. It does not simply categorize (“This is a dog”), nor does it merely predict a numeric outcome (“This house should be priced at $820,000”). Instead, it asks:
“Given what I’ve learned about the world, what can I produce that fits the patterns, rules, and structures I’ve internalized?”
This ability places generative AI closer to tasks traditionally seen as the domain of human cognition - drafting, designing, summarizing, reasoning, theorizing, and imagining.
8 The Emergence of Generative AI: A Historical Perspective
8.1 Introduction
Generative Artificial Intelligence (GenAI) represents one of the most transformative technological developments of the 21st century. Unlike traditional AI systems that focus on analyzing and classifying existing data, generative AI creates new content, text, images, code, music, and more, that often rivals human creativity. To understand how we arrived at this remarkable capability, we must trace the evolution of artificial intelligence from its theoretical foundations to the breakthrough transformer architectures that power modern large language models.
This section explores the key research milestones that paved the way for today’s generative AI systems. Each breakthrough built upon previous work, gradually expanding our understanding of how machines can learn, represent knowledge, and ultimately generate novel content. From the earliest mathematical models of neurons to the attention mechanisms that revolutionized natural language processing, this historical journey reveals both the persistence of fundamental ideas and the explosive impact of recent innovations.
8.2 The Foundations: Early Neural Network Theory
8.2.1 The McCulloch-Pitts Neuron (1943)
The conceptual journey toward generative AI began in 1943 with Warren McCulloch and Walter Pitts’ seminal paper McCulloch and Pitts (1943), “A Logical Calculus of the Ideas Immanent in Nervous Activity.” This work established the first mathematical model of a biological neuron, laying the theoretical groundwork for all neural networks that would follow.
McCulloch, a neuroscientist, and Pitts, a logician, proposed that neurons could be modeled as binary threshold units. Their artificial neuron receives multiple binary inputs, computes a weighted sum, and produces a binary output based on whether this sum exceeds a threshold. Mathematically, this can be expressed as:
where are the input signals, are the synaptic weights, and is the threshold value.
The profound insight of this work was demonstrating that networks of such simplified neurons could, in principle, compute any logical function. McCulloch and Pitts showed that these networks were Turing complete, they could perform any computation that a digital computer could perform. This established a crucial link between neural biology, logic, and computation.
However, the McCulloch-Pitts model had significant limitations. The weights were manually set rather than learned, and the neurons used hard thresholds rather than smooth activation functions. Despite these constraints, the model proved that neural-like computation was theoretically viable and planted the seed for adaptive learning systems.
8.2.2 The Perceptron: Learning Emerges (1958)
Fifteen years after the McCulloch-Pitts neuron, Frank Rosenblatt introduced a revolutionary advance: a neural network that could learn from examples. His 1958 paper Rosenblatt (1958), “The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain,” described both a theoretical model and a physical machine capable of pattern recognition.
The perceptron built upon the McCulloch-Pitts neuron but added a critical innovation, a learning algorithm. Rosenblatt’s perceptron could adjust its weights based on training examples, gradually improving its ability to classify patterns. The learning rule was elegantly simple:
where is the learning rate, is the target (correct) output, and is the actual output produced by the perceptron.
This rule embodies a fundamental principle that persists in modern deep learning: learning from errors. When the perceptron makes a mistake, the weights are adjusted in proportion to the error, moving the decision boundary toward correct classification.
Rosenblatt’s physical implementation, the Mark I Perceptron, was built in 1958 and could recognize simple geometric shapes. It consisted of 400 photocells connected to randomly wired units with adjustable weights. This demonstration of machine learning captivated both the scientific community and popular imagination, with media reports suggesting that machines might soon rival human intelligence.
The perceptron learning algorithm came with an important theoretical guarantee: for linearly separable problems, the algorithm would converge to a solution in finite time. This convergence theorem provided mathematical confidence in the learning process and suggested broad applicability.
8.2.3 The First AI Winter: Perceptrons Criticized (1969)
The optimism surrounding perceptrons faced a severe challenge in 1969 when Marvin Minsky and Seymour Papert published their book Minsky and Papert (1969) “Perceptrons.” Through rigorous mathematical analysis, they demonstrated fundamental limitations of single-layer perceptrons.
Most famously, Minsky and Papert proved that a single-layer perceptron cannot solve the XOR (exclusive OR) problem, a simple logical function where the output is true when the inputs differ shown in figure. The XOR function is not linearly separable, meaning no single straight line can separate the positive and negative examples in the input space.
Code
import matplotlib.pyplot as plt
import numpy as np
# All possible binary inputs
X = np.array([[0, 0],
[0, 1],
[1, 0],
[1, 1]])
# Logic gate outputs
def AND(x): return np.array([a & b for a, b in x])
def NAND(x): return np.array([1 - (a & b) for a, b in x])
def OR(x): return np.array([a | b for a, b in x])
def XOR(x): return np.array([a ^ b for a, b in x])
gates = {
"AND": AND(X),
"NAND": NAND(X),
"OR": OR(X),
"XOR": XOR(X),
}
fig, axes = plt.subplots(2, 2, figsize=(6, 6))
axes = axes.ravel()
for ax, (name, y) in zip(axes, gates.items()):
# Plot points: 0 = blue circle, 1 = red diamond
for (x1, x2), label in zip(X, y):
if label == 0:
ax.scatter(x1, x2, c="#5DADE2", marker="o", s=60)
else:
ax.scatter(x1, x2, c="#D23641", marker="D", s=60)
# Add (optional) linear boundary for linearly separable ones
if name in ["AND", "NAND", "OR"]:
xs = np.linspace(-0.2, 1.2, 100)
if name == "AND":
# Example separating line: x1 + x2 = 1.5
ax.plot(xs, 1.5 - xs, color="#5DADE2")
elif name == "NAND":
# Example: x1 + x2 = 0.5
ax.plot(xs, 0.5 - xs, color="#5DADE2")
elif name == "OR":
# Example: x1 + x2 = 0.5
ax.plot(xs, 0.5 - xs, color="#5DADE2")
ax.set_title(name)
ax.set_xlim(-0.2, 1.2)
ax.set_ylim(-0.2, 1.2)
ax.set_xticks([0, 1])
ax.set_yticks([0, 1])
ax.set_xlabel("x1")
ax.set_ylabel("x2")
plt.tight_layout()
plt.show()More broadly, Minsky and Papert showed that single-layer perceptrons could only classify patterns that are linearly separable. This limitation excluded many important problems, from recognizing complex patterns to solving multi-class classification tasks with intricate decision boundaries.
While Minsky and Papert acknowledged that multi-layer networks might overcome these limitations, they were pessimistic about finding effective training methods for such networks. Their book’s impact was profound and, in retrospect, perhaps overly dampening. Funding for neural network research dried up, ushering in what became known as the first “AI Winter”, a period of reduced interest and investment that lasted through the 1970s.
In hindsight, the critique was technically correct but incomplete. The limitations applied specifically to single-layer networks, and solutions existed but had not yet been fully developed. The field needed both theoretical advances and computational power that would not arrive until the 1980s.
8.3 The Renaissance: Backpropagation and Deep Learning
8.3.1 Backpropagation: Training Deep Networks (1986)
The neural network renaissance began in earnest with the rediscovery and popularization of the backpropagation algorithm. While similar ideas had appeared earlier, the 1986 paper Rumelhart, Hinton, and Williams (1986) “Learning representations by back-propagating errors” by David Rumelhart, Geoffrey Hinton, and Ronald Williams brought backpropagation to widespread attention and demonstrated its power.
Backpropagation solved the critical problem that Minsky and Papert had identified: how to train multi-layer neural networks. The algorithm extends gradient descent to networks with hidden layers, computing how each weight contributes to the overall error and adjusting weights accordingly.
The key insight involves the chain rule from calculus. For a network with layers, the error signal propagates backward from the output layer through each hidden layer, with each layer receiving a gradient signal proportional to its contribution to the final error:
where is the error, is the output of neuron , is its weighted input, and is the weight from neuron to neuron .
This decomposition allows efficient computation of gradients for all weights in the network, making it feasible to train networks with multiple hidden layers. The algorithm’s elegance lies in its systematic approach: compute the error at the output, then propagate this error backward through the network, layer by layer, calculating how much each weight should change.
Rumelhart, Hinton, and Williams demonstrated that networks trained with backpropagation could learn internal representations, patterns in the hidden layers that were not explicitly taught but emerged from the learning process. These learned representations could capture hierarchical features, with early layers learning simple patterns and deeper layers combining them into complex concepts.
The impact was immediate and profound. Backpropagation showed that multi-layer networks could learn XOR and other non-linearly separable problems. It enabled neural networks to tackle real-world problems in speech recognition, pattern classification, and early natural language processing. The theoretical barrier identified by Minsky and Papert had been overcome.
8.4 The Modern Era: Deep Learning Revolution
8.4.1 ImageNet and Convolutional Networks (2012)
Despite backpropagation’s theoretical power, neural networks struggled to compete with other machine learning methods through the 1990s and 2000s. Networks were difficult to train, prone to overfitting, and often performed worse than simpler methods like support vector machines. This changed dramatically in 2012 with the ImageNet moment.
The paper Krizhevsky, Sutskever, and Hinton (2012) “ImageNet Classification with Deep Convolutional Neural Networks” by Alex Krizhevsky, Ilya Sutskever, and Geoffrey Hinton presented AlexNet, a deep convolutional neural network that won the ImageNet Large Scale Visual Recognition Challenge by a massive margin. Where previous winners achieved around 26% error rates, AlexNet achieved 16%, a revolutionary improvement.
AlexNet’s architecture combined several key innovations:
- Convolutional Layers: Rather than connecting every neuron to every input pixel, convolutional layers use small, learnable filters that slide across the image. This design captures spatial relationships and dramatically reduces the number of parameters. A convolutional operation can be expressed as:
where is the input image and is the filter kernel.
ReLU Activation: Instead of traditional sigmoid or tanh functions, AlexNet used Rectified Linear Units (ReLU), defined as . This simple function accelerated training by avoiding vanishing gradients and introducing beneficial sparsity.
- Dropout Regularization: During training, random neurons were temporarily ignored, preventing overfitting by ensuring the network couldn’t rely too heavily on any single neuron.
GPU Training: AlexNet leveraged GPU parallel processing to train on massive datasets, reducing training time from weeks to days.
The ImageNet breakthrough proved that deep neural networks could exceed human-level performance on complex perceptual tasks when given sufficient data and computation. This catalyzed the deep learning revolution, with organizations worldwide investing in neural network research and applications.
Crucially for generative AI, the success demonstrated that deep networks could learn hierarchical representations of complex data. Early layers in AlexNet learned edge detectors, middle layers learned texture and pattern detectors, and deep layers learned object part detectors. This hierarchical feature learning would prove essential for generation, to create realistic images or text, models need to understand structure at multiple levels of abstraction.
8.4.2 Attention Mechanism: The Transformer Revolution (2017)
The most transformative development for modern generative AI came in 2017 with the paper Vaswani et al. (2017) “Attention Is All You Need” by Ashish Vaswani and colleagues at Google. This work introduced the Transformer architecture, which abandoned recurrent and convolutional layers entirely in favor of attention mechanisms.
Previous sequence models, like Recurrent Neural Networks (RNNs) and Long Short-Term Memory (LSTM) networks, processed sequences one element at a time, maintaining a hidden state. This sequential processing created bottlenecks: it was slow, difficult to parallelize, and struggled with long-range dependencies despite theoretical capabilities.
The Transformer’s core innovation was the self-attention mechanism, which allows each position in a sequence to attend to all other positions simultaneously. For an input sequence, attention computes three vectors for each element: Query (Q), Key (K), and Value (V). The attention mechanism then computes:
where is the dimension of the key vectors, and the softmax ensures attention weights sum to one.
This mechanism provides several crucial advantages:
- Parallelization: Unlike RNNs that process sequentially, all attention computations can occur in parallel, dramatically accelerating training on modern hardware.
- Long-range Dependencies: Any position can directly attend to any other position, with no intermediate steps. This allows the model to capture dependencies across the entire sequence, whether it’s 10 words or 10,000 tokens apart.
- Interpretability: Attention weights show which parts of the input the model focuses on when processing each element, providing insight into the model’s reasoning.
The original Transformer used multi-head attention, running several attention operations in parallel with different learned transformations, then concatenating the results. This allows the model to attend to different aspects of the input simultaneously, perhaps focusing on syntactic structure with one head and semantic content with another.
The Transformer architecture also introduced positional encodings, since the attention mechanism itself has no inherent notion of sequence order. These encodings inject information about position into the input embeddings, allowing the model to use word order.
The immediate impact was revolutionary performance on machine translation tasks, but the broader implications extended far beyond. The Transformer architecture proved to be exceptionally scalable, performance improved reliably as models grew larger and were trained on more data. This scalability would enable the large language models that define modern generative AI.
8.5 From Transformers to Generative AI
While the 2017 Transformer paper focused on translation, researchers quickly recognized the architecture’s potential for generation. By 2018, OpenAI’s GPT (Generative Pre-trained Transformer) demonstrated that Transformers could generate coherent text by predicting the next word in a sequence. BERT (Bidirectional Encoder Representations from Transformers) showed how Transformers could learn rich language representations through masked language modeling.
These developments set the stage for the generative AI explosion that followed. GPT-2, GPT-3, and subsequent large language models achieved increasingly impressive generation capabilities, producing human-quality text across diverse tasks. Transformer-based image generators like DALL-E combined language and vision, while models like Stable Diffusion and Midjourney brought text-to-image generation to millions of users.
The journey from McCulloch-Pitts neurons to modern generative AI spans eight decades of research, setbacks, and breakthroughs. Each milestone built upon previous work while introducing novel ideas that expanded what was computationally possible. The theoretical foundations established in the 1940s remain relevant, modern deep learning still uses weighted sums and thresholds, gradient-based learning, and hierarchical representations. Yet the scale, sophistication, and capabilities have grown exponentially, particularly in the last decade.
8.6 How Generative Models Work
Although generative AI appears magical, its mechanisms are grounded in mathematical principles.
8.6.1 Representing Data as Distributions
Traditional machine learning estimates the probability of a label given some features (). Generative models instead estimate the joint distribution of inputs and outputs - the probability of both occurring together (). This allows the model to generate new x-values (new examples) that are consistent with the learned distribution.
8.6.2 Latent Space and Meaning
Many generative models map inputs into a “latent space,” a compressed representation that captures the essence of the data. For language models, latent vectors represent:
- meaning
- tone
- relationships
- context
- intent
For images, latent vectors represent:
- shapes
- textures
- lighting
- geometry
The model navigates this latent space to synthesize new outputs.
8.6.3 Self-Attention and Contextual Understanding
Transformers use self-attention to determine how each token (word or subword) relates to every other token. This process allows the model to maintain coherence, resolve references, and follow long, complex instructions.
8.6.4 Next-Token Prediction
At its core, a generative language model predicts the most likely next token given all previous tokens. Despite its simplicity, the depth of training enables it to produce:
- essays
- code
- analysis
- recommended actions
- explanations
- summaries
Complex reasoning emerges because next-token prediction is stacked across billions of parameters and trillions of training tokens.
8.7 Types of Generative Models (Expanded)
8.7.1 Diffusion Models
Diffusion models generate data by simulating the process of gradually adding noise to an image and then learning to reverse the process. They produce highly detailed and coherent images and are widely used for AI art and simulation.
8.7.2 Generative Adversarial Networks (GANs)
GANs remain influential for producing realistic imagery, enhancing video, and generating synthetic datasets.
8.7.3 Variational Autoencoders (VAEs)
VAEs are prized in scientific domains where interpretability and structured latent representations are crucial.
8.7.4 Transformer-Based Generative Models
Transformers have become the dominant architecture for:
- text generation
- multimodal generation
- code synthesis
- document understanding
- data reasoning
They are the backbone of today’s most powerful generative AI systems.
8.8 Applications of Generative AI Across Domains
8.8.1 Scientific Research and Discovery
Generative models accelerate:
- molecular design
- protein engineering
- scientific hypothesis generation
- literature summarization
- complex simulations
8.8.2 Healthcare and Life Sciences
Applications include:
- generating synthetic patient data
- assisting clinical documentation
- analyzing biological sequences
- supporting drug discovery workflows
8.8.3 Engineering, Automotive, and Manufacturing
Generative AI supports:
- creating optimized part geometries
- simulating rare scenarios
- predicting outcomes of design changes
- generating synthetic training data for vision models
8.8.4 Media, Arts, and Entertainment
Generative tools:
- accelerate scriptwriting and storyboarding
- assist with animation, music, and sound design
- enable personalized storytelling and world-building
8.8.5 Business Operations and Customer Experience
Generative AI enhances:
- customer support
- document summarization
- internal knowledge search
- training, onboarding, and reporting
- statistical analysis and planning
8.8.6 Energy and Infrastructure
Models support:
- predictive insights
- anomaly detection
- documentation generation
- system modeling and optimization
8.9 Benefits of Generative AI
8.9.1 Acceleration of Knowledge Work
Generative AI reduces cognitive load by:
- reorganizing information
- summarizing long documents
- drafting initial analyses
- transforming data into narrative insights
8.9.2 Enhanced Creativity
By generating diverse alternatives and variations, models expand the creative space available to humans.
8.9.3 Operational Efficiency
Generative AI automates repetitive writing, documentation, reporting, and analysis tasks.
8.9.4 Personalization
Models can refine content for specific audiences, goals, tones, or domains.
8.9.5 Synthetic Data Generation
Generative models provide high-quality synthetic datasets that support training, testing, and experimentation without risking privacy.
8.9.6 Scalability
Generative workflows allow organizations to respond faster and operate at greater scale with fewer manual bottlenecks.
8.10 Limitations and Challenges
Despite their capabilities, generative AI systems face important constraints:
8.10.1 Hallucinations
Models occasionally fabricate details or inconsistencies when they lack reliable context.
8.10.2 Bias
Biases in training data can appear in model outputs.
8.10.3 Lack of True Understanding
Generative models manipulate patterns statistically; they do not possess consciousness, intent, or genuine comprehension.
8.10.4 Explainability
The reasoning behind model outputs may be difficult to trace.
8.10.5 Resource Demands
Training and deploying generative models require substantial computational infrastructure.
8.11 Best Practices for Using Generative AI
- Begin with internal workflows before deploying externally
- Communicate clearly when AI-generated content is used
- Employ guardrails to prevent leakage of sensitive information
- Test models extensively using a range of input scenarios
- Educate users about limitations, biases, and failure modes
- Ensure that generative outputs undergo human review in critical contexts
8.12 Learning Pathways for Generative AI
Beginners benefit from understanding:
- machine learning foundations
- neural networks and attention mechanisms
- Python and model experimentation
- prompt engineering and evaluation
- embedding systems and vector search
- ethics, governance, and responsible use
This foundation supports deeper study in model tuning, RAG systems, and applied generative workflows.